'''
1.赋值运算符：= += -= *= /=,其中-= *= /=只能应用在数值，字符串不支持
+=可以用于数值，也可以用于字符串如果用于字符串起到字符拼接效果
'''
name = 'zhang'
name1 = name
print(id(name),name)
print(id(name1),name1)
a = 'aaa'
a += 'bbb'
print(a)
print('-' * 20)
# a = 'aa'
# a -= 'bb'
# print(a)#TypeError: unsupported operand type(s) for -=: 'str' and 'str'

'''
2.算术运算符：+ - * / **(a的b次幂) //(整除) %(求余)
'''
a = 8
b = 3
x = a ** b
y = a // b
z = a % b
print(x,y,z)
print('-' * 20)
'''
3.关系运算符： > < == !=  >= <= is(对象比较)  
关系运算返回的结果为布尔值(True,False)
(1)小整数对象池:
     整数在程序中的使用非常广泛，Python为了优化速度，使用了小整数对象池， 
     避免为整数频繁申请和销毁内存空间。Python 对小整数的定义是 [-5, 256] 这
     些整数对象是提前建立好的，不会被垃圾回收。在一个 Python 的程序中，无论
     这个整数处于LEGB中的哪个位置，所有位于这个范围内的整数使用的都是同一个对象。同理，单个字母也是这样的。
(2)大整数对象池。
     说明：终端是每次执行一次，所以每次的大整数都重新创建，而在pycharm中，
     每次运行是所有代码都加载都内存中，属于一个整体，所以这个时候会有一个大整数对象池，
     即处于一个代码块的大整数是同一个对象。
'''
a = 2000000
b = 2000000
print(id(a),a)
print(id(b),b)
print(a == b)
print(a is b)
print('-' * 20)
'''
4.逻辑运算符：and(逻辑与，一假即假) or(逻辑或，一真即真) not(逻辑非，非真即假，非假即真)
逻辑运算返回的结果为布尔值(True,False)
'''
a = 5
b = 4
c = 9
x = a < b and b > c
y = a > b or b < c - a
z = not a
print(x,y,z)
print('-' * 20)
'''
5.位运算符：&(与运算，一假即假) |(或运算，一真即真) ~(取反) ^(异或，相同为0，不同为1) 
         <<(左移，m左移n位相当于这个数乘以2的n次方,m * 2的n次方) 
         >>(右移，m右移n位相当于这个数除以2的n次方,m // 2的n次方)
进制转换：二进制表示：0b1000 十进制表示：8 八进制表示：0o547 十六进制：0xab78
二进制转十进制：int(0b1000)
十进制转二进制: bin(8)
'''
a = 8
b = 0b1010
c = -8
print(bin(a))
print(int(b))
print(bin(c)) #先取反再加1
print(3 & 5)
print(3 | 5)
print(3 ^ 5)
print(~5)
print(16<<2)
print(16>>2)
print('-' * 20)
'''
6.三目运算符：结果 if 表达式 else 结果
'''
a = 5
b = 3
result = 5+3 if a > b else a - b
print(result)

'''
7.运算符的优先级
从高到低排序：
  **
  ~
  + - (符合运算符)
  * / // %
  + - 加减
  << >>
  &
  ^
  |
  == != > >= < <=
  is is not
  not 
  and
  or
'''